// 对axios进行二次封装 加上请求拦截器与响应拦截器

import axios from "axios";
// 引入进度条
import nProgress from "nprogress";
// 当前模块引入store
import store from "@/store";
import router from "@/router";
// 引入进度条的样式
import "nprogress/nprogress.css";

const baseURL = "http://127.0.0.1:3000";
const requests = axios.create({
  baseURL,
  timeout: 5000,
  headers: {
    "Access-Control-Allow-Origin": "*",
    "Content-Type": "application/json",
    // 添加其他的头部信息
  },
});

// 请求拦截器
// 发请求时统一带请求头 token
requests.interceptors.request.use((config) => {
  nProgress.start();
  if (store.state.users.token) {
    config.headers.Authorization = store.state.users.token;
  }
  return config;
});
requests.interceptors.response.use(
  (res) => {
    // 成功回调
    nProgress.done();
    return res.data;
  },
  (err) => {
    if (err && err.response && err.response.status) {
      if (err.response.status === 401) {
        store.commit("UPDATETOKEN", "");
        store.commit("UPDATEUSERINFO", {});
        router.push("/login");
        alert("用户身份已过期！");
      }
    } else {
      // 处理网络错误
      console.error("网络请求错误:", err.message);
      alert("网络请求错误，请检查网络连接或稍后重试！");
    }
    return Promise.reject(err); // 返回错误，以便后续处理
  }
);
export default requests;
